#ifndef INC_COMMAND_H
#define INC_COMMAND_H

/**
 * Interface class forms the base of all Commands in the controller.
 *
 * Subclasses should:
 * 1) be named FooCmd.
 * 2) have a reasonably fast copy constructor.
 * 3) perform absolute, not relative, operations--e.g., a MoveCmd should set an
 *   explicit position, not calculate one based on a delta from an object's
 *   previous position. (This is for undo.)
 */
class Command
{
	public:
		/*** COMMANDISH STUFF ***/

		/**
		 * Executes the command.
		 */
		virtual void execute() = 0;

		/**
		 * Reverses execution of the command, e.g., for undo.
		 */
		virtual void unexecute() = 0;
};

#endif //INCLUDE_COMMAND_H

